高效检索信息是处理海量信息的前提,二分查找适用的数据结构是有序数组,还有二叉查找树,红黑树,和散列表三种数据类型来实现高效的查找。
二分查找
二分查找一个有序的数组,复杂度O(logn)
1 | public Integer binarySearch(int[] list, int key){ |
但实际上用int型查找型非常局限,为了拓展,我们用Comparable的对象。
1 | public class binarySearch<Key extends Comparable<Key>, Value> { |
二叉查找树
二叉树的每个节点都大于左子树的任意一个节点,小于右子树的任意一个节点。查找的最坏情况O(n),最好情况O(logn)
二叉查找树的生成和插入,非递归 java:
1 | package algos; |
二叉查找树的搜索 递归:
1 |
|
二叉查找树最坏情况下的时间和树的高度成正比(O(n)),所以当最坏情况的性能还是很糟糕,所以我们可以用平衡树,能保证无论如何构造他她的运行时间都是对数级(树的高度是LogN)